// lib/screens/home/home_screen.dart
import 'package:flutter/material.dart';
import 'package:flutter_bluebell/screens/home/widgets/community_list_widget.dart';
import 'package:flutter_bluebell/screens/home/widgets/post_list_item_widget.dart';
import '../../api/community_api.dart';
import '../../api/post_api.dart'; // 确保 PostApi 已导入
import '../../models/community.dart';
import '../../models/post.dart';
import '../../routes/app_routes.dart';

class HomeScreen extends StatefulWidget {
  const HomeScreen({super.key});

  @override
  State<HomeScreen> createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final TextEditingController _searchController = TextEditingController();
  final CommunityApi _communityApi = CommunityApi();
  final PostApi _postApi = PostApi(); // PostApi 实例

  List<Community> _communities = [];
  List<Post> _posts = [];
  bool _isLoadingCommunities = true;
  bool _isLoadingPosts = true;
  bool _isSearching = false; // 新增状态：指示当前是否处于搜索模式

  int _selectedCommunityId = 0; // 初始化为 0 (表示所有社区)

  @override
  void initState() {
    super.initState();
    _fetchCommunities();
    _fetchPosts(); // 页面初始化时加载所有帖子
    // 监听搜索框文本变化，以便动态显示清除按钮
    _searchController.addListener(() {
      setState(() {
        // 触发 UI 刷新，以便根据 _searchController.text.isNotEmpty 更新清除按钮的可见性
      });
    });
  }

  @override
  void dispose() {
    _searchController.dispose(); // 销毁控制器，防止内存泄漏
    super.dispose();
  }

  // --- API 数据获取方法 ---

  /// 获取社区列表
  Future<void> _fetchCommunities() async {
    setState(() {
      _isLoadingCommunities = true;
    });
    try {
      final response = await _communityApi.getCommunities();
      if (response.code == 1000) {
        setState(() {
          _communities = response.data ?? [];
        });
      } else {
        // 考虑向用户显示错误信息
        print('获取社区失败: ${response.msg}');
      }
    } catch (e) {
      print('获取社区异常: $e');
      // 考虑向用户显示错误信息
    } finally {
      setState(() {
        _isLoadingCommunities = false;
      });
    }
  }

  /// 获取帖子列表（非搜索模式）
  /// [communityId] 社区ID，为 null 或 0 表示所有社区
  Future<void> _fetchPosts({int? communityId}) async {
    setState(() {
      _isLoadingPosts = true;
      _isSearching = false; // 离开搜索模式，切换到普通帖子列表
    });
    try {
      final response = await _postApi.getPosts(communityId: communityId ?? 0);
      if (response.code == 1000) {
        setState(() {
          _posts = response.data ?? []; // 更新帖子列表
        });
      } else {
        print('获取帖子失败: ${response.msg}');
        setState(() {
          _posts = []; // 错误时清空帖子列表
        });
      }
    } catch (e) {
      print('获取帖子异常: $e');
      setState(() {
        _posts = []; // 异常时清空帖子列表
      });
    } finally {
      setState(() {
        _isLoadingPosts = false;
      });
    }
  }

  // --- 搜索逻辑 ---

  /// 执行搜索操作
  Future<void> _onSearch() async {
    final String keyword = _searchController.text.trim(); // 获取并去除前后空格的关键字
    print('搜索查询: $keyword');

    if (keyword.isEmpty) {
      // 如果搜索框为空或清除，则刷新当前选定社区的帖子（或所有帖子）
      _fetchPosts(communityId: _selectedCommunityId);
      return;
    }

    setState(() {
      _isLoadingPosts = true;
      _isSearching = true; // 进入搜索模式
      _posts = []; // 立即清空当前帖子列表，提供即时视觉反馈
      _selectedCommunityId = 0; // 搜索时重置社区选择，因为搜索是跨社区的
    });

    try {
      final response = await _postApi.searchPosts(keyword: keyword); // 调用搜索 API
      if (response.code == 1000) {
        setState(() {
          _posts = response.data ?? []; // 使用搜索结果更新帖子列表
        });
      } else {
        print('搜索帖子失败: ${response.msg}');
        setState(() {
          _posts = []; // 搜索失败时清空帖子
        });
        if (mounted) { // 检查 Widget 是否仍在树中
          ScaffoldMessenger.of(context).showSnackBar(
            SnackBar(content: Text('搜索失败: ${response.msg ?? "未知错误"}')),
          );
        }
      }
    } catch (e) {
      print('搜索时发生异常: $e');
      setState(() {
        _posts = []; // 异常时清空帖子
      });
      if (mounted) { // 检查 Widget 是否仍在树中
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('搜索时发生异常: $e')),
        );
      }
    } finally {
      setState(() {
        _isLoadingPosts = false;
      });
    }
  }

  // --- 社区选择逻辑 ---

  /// 处理社区点击事件
  /// [communityId] 被点击社区的ID
  void _onCommunityTap(int communityId) {
    // 如果当前处于搜索模式，点击社区时应清除搜索框内容
    if (_isSearching) {
      _searchController.clear();
    }
    setState(() {
      _selectedCommunityId = communityId;
      _isSearching = false; // 离开搜索模式
    });
    _fetchPosts(communityId: communityId); // 获取选中社区的帖子
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('首页'),
      ),
      body: RefreshIndicator(
        onRefresh: () async {
          _searchController.clear(); // 下拉刷新时清空搜索框
          setState(() {
            _selectedCommunityId = 0; // 下拉刷新时重置为所有社区
            _isSearching = false; // 退出搜索模式
          });
          await _fetchCommunities();
          await _fetchPosts();
        },
        child: Column(
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: TextField(
                controller: _searchController,
                decoration: InputDecoration(
                  hintText: '搜索帖子...', // 搜索提示文本
                  prefixIcon: const Icon(Icons.search),
                  border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(20.0),
                  ),
                  suffixIcon: Row(
                    mainAxisSize: MainAxisSize.min, // 行的宽度只与其子组件内容一样大
                    children: [
                      // 清除按钮：当搜索框有文本或处于搜索模式时显示
                      if (_searchController.text.isNotEmpty || _isSearching)
                        IconButton(
                          icon: const Icon(Icons.clear),
                          onPressed: () {
                            _searchController.clear(); // 清空搜索框
                            if (_isSearching) { // 如果之前在搜索模式，清空后重新加载常规帖子
                              _onSearch(); // 调用 _onSearch 会触发 _fetchPosts
                            } else {
                              setState(() {}); // 触发 UI 刷新，隐藏清除按钮
                            }
                          },
                        ),
                      // 发布帖子按钮
                      Padding(
                        padding: const EdgeInsets.only(right: 8.0), // 增加右侧间距
                        child: Material(
                          color: Theme.of(context).primaryColor, // 使用主题主色
                          borderRadius: BorderRadius.circular(20.0), // 应用圆角
                          child: InkWell(
                            borderRadius: BorderRadius.circular(20.0), // 用于 InkWell 的波纹效果
                            onTap: () {
                              Navigator.of(context).pushNamed(AppRoutes.publishPostScreen);
                            },
                            child: const SizedBox(
                              width: 40, // 设为正方形
                              height: 40, // 设为正方形
                              child: Icon(Icons.add, color: Colors.white), // 白色加号图标
                            ),
                          ),
                        ),
                      ),
                    ],
                  ),
                ),
                onSubmitted: (_) => _onSearch(), // 提交时调用搜索方法
              ),
            ),
            const Divider(), // 分隔线

            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
              child: ElevatedButton(
                onPressed: () {
                  Navigator.of(context).pushNamed(AppRoutes.chatPage);
                  // Add your navigation logic here, e.g., Navigator.of(context).pushNamed(AppRoutes.deepseekChatScreen);
                },
                child: const Text('DeepSeek Chat'),
              ),
            ),

            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 8.0),
              child: Align(
                alignment: Alignment.centerLeft,
                child: Text(
                  '热门社区',
                  style: Theme.of(context).textTheme.titleLarge,
                ),
              ),
            ),
            const SizedBox(height: 8),
            _isLoadingCommunities
                ? const Center(child: CircularProgressIndicator()) // 加载社区时显示加载指示器
                : CommunityListWidget(
              communities: _communities,
              onCommunityTap: _onCommunityTap,
              selectedCommunityId: _selectedCommunityId,
            ),
            const Divider(), // 分隔线
            Padding(
              padding: const EdgeInsets.symmetric(horizontal: 8.0),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: [
                  Text(
                    _isSearching ? '搜索结果' : (_selectedCommunityId == 0 ? '最新帖子' : '社区帖子'), // 根据是否搜索显示不同标题
                    style: Theme.of(context).textTheme.titleLarge,
                  ),
                  // 当处于特定社区或搜索模式时，提供返回“全部帖子”的按钮
                  if (_selectedCommunityId != 0 || _isSearching) // 当不是在显示所有帖子时显示
                    TextButton(
                      onPressed: () {
                        _searchController.clear(); // 清空搜索框
                        _onCommunityTap(0); // 点击显示全部帖子
                      },
                      child: const Text('全部帖子'),
                    ),
                ],
              ),
            ),
            const SizedBox(height: 8),
            _isLoadingPosts
                ? const Center(child: CircularProgressIndicator()) // 加载帖子时显示加载指示器
                : Expanded(
              child: _posts.isEmpty
                  ? Center(
                child: Text(_isSearching ? '未找到相关帖子' : '暂无帖子'), // 根据是否搜索显示不同提示
              )
                  : ListView.builder(
                itemCount: _posts.length,
                itemBuilder: (context, index) {
                  final post = _posts[index];
                  return PostListItemWidget(
                    post: post,
                    onTap: () {
                      Navigator.of(context).pushNamed(
                        AppRoutes.postDetailScreen,
                        arguments: post.postId,
                      );
                    },
                  );
                },
              ),
            ),
          ],
        ),
      ),
    );
  }
}